srcdir=compil
out=projet
srclex=$(out).l
srcyacc=$(out).y
cc=gcc
lex=flex
yacc=bison
cflags=-W -Wall -ansi -pedantic
lflags=-lSDL -lGLU -lGL
exec=operation
src= $(wildcard *.c)
obj= $(srcdir)/lex.yy.o $(srcdir)/y.tab.o $(src:.c=.o)

all: $(exec)

operation: $(obj)
	$(cc) -o $@ $^ $(lflags) -ll -ly

main.o: main.c $(srcdir)/y.tab.h
	$(cc) -o $@ -c $< $(cflags)

%.o: %.c
	$(cc) -o $@ -c $< $(cflags) 

$(srcdir)/$(out): $(srcdir)/y.tab.o $(srcdir)/lex.yy.o
	$(cc)  $(srcdir)/y.tab.o $(srcdir)/lex.yy.o -o $(srcdir)/$(out)

$(srcdir)/lex.yy.o: $(srcdir)/lex.yy.c $(srcdir)/y.tab.h
	$(cc) -o $(srcdir)/lex.yy.o -c $(srcdir)/lex.yy.c

$(srcdir)/lex.yy.c: $(srcdir)/$(srclex)
	$(lex) -o $(srcdir)/lex.yy.c $(srcdir)/$(srclex)

$(srcdir)/y.tab.h: $(srcdir)/$(srcyacc)
	$(yacc) $(srcdir)/$(srcyacc) -d -o $(srcdir)/y.tab.c

$(srcdir)/y.tab.o: $(srcdir)/y.tab.c
	$(cc) -o $(srcdir)/y.tab.o -c $(srcdir)/y.tab.c

$(srcdir)/y.tab.c: $(srcdir)/$(srcyacc)
	$(yacc) $(srcdir)/$(srcyacc) -o $(srcdir)/y.tab.c

clean:
	rm -f $(srcdir)/lex.yy.* $(srcdir)/y.tab.* $(srcdir)/*.o $(srcdir)/$(out) *.o
